import ExcelJS from 'exceljs';


/**
 * 将 Uint8Array 转换为 Base64 编码字符串
 * @param {Uint8Array} uint8Array - 待转换的二进制数组
 * @returns {string} Base64 编码字符串
 */
function uint8ArrayToBase64(uint8Array) {
  // Base64 编码表
  const base64Chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
  let result = '';
  let i = 0;
  const len = uint8Array.length;

  while (i < len) {
    // 取3个字节（24位），不足则用0填充
    const byte1 = i < len ? uint8Array[i++] : 0;
    const byte2 = i < len ? uint8Array[i++] : 0;
    const byte3 = i < len ? uint8Array[i++] : 0;

    // 拆分出4个6位的值（3*8 = 4*6）
    const code1 = (byte1 >> 2) & 0x3F;
    const code2 = ((byte1 & 0x03) << 4) | ((byte2 >> 4) & 0x0F);
    const code3 = ((byte2 & 0x0F) << 2) | ((byte3 >> 6) & 0x03);
    const code4 = byte3 & 0x3F;

    // 处理不足3字节的情况（添加填充符 =）
    const char1 = base64Chars[code1];
    const char2 = base64Chars[code2];
    const char3 = i > len + 1 ? '=' : base64Chars[code3]; // 不足2字节时，第3个为 =
    const char4 = i > len ? '=' : base64Chars[code4];     // 不足3字节时，第4个为 =

    result += char1 + char2 + char3 + char4;
  }

  return result;
}
const exportExcel = (list) => {
  // 1. 创建简单的Excel（避免复杂样式导致的二进制异常）
  const workbook = new ExcelJS.Workbook();
  const worksheet = workbook.addWorksheet('Sheet1');
  let item = list[0]
  let row = []
  for(let i in item){
    row.push(i)
  }
  worksheet.addRow(['姓名', '年龄']);
  worksheet.addRow(['张三', 20]);

  // 2. 生成Excel的二进制数据并强制转换为Uint8Array
  workbook.xlsx.writeBuffer().then(buffer => {
    // 关键：将buffer转为原始二进制数组（兼容各种对象格式）
    const binaryArray = [];
    // 遍历buffer的每一个字节（无论buffer是对象还是数组）
    for (let i = 0; i < buffer.length; i++) {
      binaryArray.push(buffer[i] & 0xFF); // 确保每个值是8位无符号整数
    }
    // 基于原始数组创建Uint8Array（小程序认可的类型）
    const uint8Array = new Uint8Array(binaryArray);

    // 3. 验证数据类型（必须为Uint8Array）
    console.log('数据类型正确：', uint8Array instanceof Uint8Array); // 需输出true

    // 4. 写入文件
    const fs = wx.getFileSystemManager();
    console.log('文件路径：', fs.writeFile);
    console.log('文件',uint8Array)
    const filePath = `${wx.env.USER_DATA_PATH}/test.xlsx`;
    fs.writeFile({
      filePath,
      data: uint8ArrayToBase64(uint8Array), // 此时为正确类型
      encoding: 'base64',
      success() {
        wx.openDocument({
          filePath,
          showMenu: true,
          success() { wx.showToast({ title: '导出成功', icon: 'success' }); }
        });
      },
      fail(err) {
        console.error('写入失败：', err.errMsg);
        wx.showToast({ title: '写入失败', icon: 'none' });
      }
    });
  }).catch(err => {
    console.error('生成Excel失败：', err);
  });
};

export default exportExcel;